home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1997 November & December / Amiga-CD 1997 #11-12.iso / pd-disketten / dms-gepackt / 5_96 / apd-5-96-2.dms / apd-5-96-2.adf / Amiga-E-Kurs / Listing_1.e next >
Text File  |  1996-04-15  |  1KB  |  47 lines

  1. /* Sortieralgos als E-Modul, ©95 M. Bennicke */
  2.  
  3. OPT MODULE
  4.  
  5. PROC tausch(feld:PTR TO LONG,a,b)
  6.   DEF hilf               -> Hilfsvariable
  7.  
  8.   hilf:=feld[a]          -> a zwischenspeichern
  9.   feld[a]:=feld[b]       -> b in a kopieren
  10.   feld[b]:=hilf          -> b erhält Wert von a
  11. ENDPROC
  12.  
  13. EXPORT PROC quick(feld:PTR TO LONG,min,max)
  14.   DEF links,rechts,vgl
  15.  
  16.   vgl:=feld[(min+max)/2]   -> Vergleichswert
  17.   links:=min               -> aus Mitte nehmen
  18.   rechts:=max
  19.   REPEAT
  20.     -> Feld von links & rechts durchsuchen
  21.     WHILE feld[links]<vgl DO INC links
  22.     WHILE feld[rechts]>vgl DO DEC rechts
  23.  
  24.     IF links<=rechts -> noch nicht überkreuzt?
  25.       tausch(feld,links,rechts) -> vertauschen
  26.       INC links      -> diese Elemente überspr.
  27.       DEC rechts     -> und Suche fortsetzen
  28.     ENDIF
  29.   UNTIL links>rechts -> olange nicht überkreuzt
  30.  
  31.   /* bis neue Teilfelder nur noch 1 Element lang
  32.      sind, diese genauso sortieren */
  33.   IF links<max THEN quick(feld,links,max)
  34.   IF rechts>min THEN quick(feld,min,rechts)
  35. ENDPROC
  36.  
  37. EXPORT PROC bubble(feld:PTR TO LONG,min,max)
  38.   DEF i,j
  39.  
  40.   FOR i:=max-1 TO 0 STEP -1
  41.     FOR j:=0 TO i  -> jedes Mal 1 Schritt weniger
  42.       -> jedes Element mit Nachfolger vergleichen
  43.       IF feld[j]>feld[j+1] THEN tausch(feld,j,j+1)
  44.     ENDFOR
  45.   ENDFOR
  46. ENDPROC
  47.